//
// Author:
//   Jb Evain (jbevain@gmail.com)
//
// Copyright (c) 2008 - 2015 Jb Evain
// Copyright (c) 2008 - 2011 Novell, Inc.
//
// Licensed under the MIT/X11 license.
//

using MonoFN.Collections.Generic;

namespace MonoFN.Cecil
{
    internal sealed class ParameterDefinitionCollection : Collection<ParameterDefinition>
    {
        private readonly IMethodSignature method;

        internal ParameterDefinitionCollection(IMethodSignature method)
        {
            this.method = method;
        }

        internal ParameterDefinitionCollection(IMethodSignature method, int capacity) : base(capacity)
        {
            this.method = method;
        }

        protected override void OnAdd(ParameterDefinition item, int index)
        {
            item.method = method;
            item.index = index;
        }

        protected override void OnInsert(ParameterDefinition item, int index)
        {
            item.method = method;
            item.index = index;

            for (int i = index; i < size; i++)
                items[i].index = i + 1;
        }

        protected override void OnSet(ParameterDefinition item, int index)
        {
            item.method = method;
            item.index = index;
        }

        protected override void OnRemove(ParameterDefinition item, int index)
        {
            item.method = null;
            item.index = -1;

            for (int i = index + 1; i < size; i++)
                items[i].index = i - 1;
        }
    }
}